(以下程式碼位在[pokerfirstmod/block]的ModBlocks的class)
public class ModBlocks {
public static final DeferredRegister<Block> BLOCKS =
DeferredRegister.create(ForgeRegistries.BLOCKS, Mymod.MOD_ID);
public static final RegistryObject<Block> SILVER_BLOCK = registerBlock("silver_block",
()-> new Block(BlockBehaviour.Properties.of(Material.METAL).
strength(6f).requiresCorrectToolForDrops()));
private static <T extends Block> RegistryObject<T> registerBlock(String name, Supplier<T> block){
RegistryObject<T> toReturn = BLOCKS.register(name,block);
registerBlockItem(name,toReturn);
return toReturn;
}
private static <T extends Block> RegistryObject<Item> registerBlockItem(String name,RegistryObject<T> block){
return ModItems.ITEMS.register(name, ()-> new BlockItem(block.get(),
new Item.Properties()));
}
public static void register(IEventBus eventBus){
BLOCKS.register(eventBus);
}
}
這是註冊方塊的程式碼
這個程式碼跟註冊物品的時候有甚麼不同呢?
我們上次講到(Marterial.METAL)的部分,接下來strength(6f)的部分代表方塊的硬度(玩家破壞的容易與否),requiresCorrectToolForDrops()代表這個方塊要求固定的工具來破壞,只有這樣他才會有掉落物。
註冊方塊的程式碼與註冊物品的程式碼多了兩個部分,這兩個來自 https://reurl.cc/o5rQqM ,這是這位大神在教學中使用的方法
會出現這兩個method是因為方塊在註冊的時候並不會自動註冊相應的物品,也就是說這個方塊只能以指令的方式生成,你甚至在創造模式中也找不到他,要註冊相應的物品要以BlockItem的方式呈現,這位大神將註冊Block跟BlockItem的過程串聯在一起,至於原理我請另一位大神ChatGPT來解釋
好我發現這部分比較困難,用到了泛型方法,我打算明天再講,我先放上丐版方塊註冊方法
public static final DeferredRegister<Block> BLOCKS =
DeferredRegister.create(ForgeRegistries.BLOCKS, Mymod.MOD_ID);
public static final RegistryObject<Block> SILVER_BLOCK = BLOCKS.register("silver_block"
,()-> new Block(BlockBehaviour.Properties.of(Material.METAL).strength(6f).requiresCorrectToolForDrops()));
public static final RegistryObject<BlockItem> SILVER_BLOCKITEM = ITEMS.register("silver_block",()-> new BlockItem(SILVER_BLOCK.get(),new Item.Properties()));
這個就好理解多了,我們註冊方塊(Block)與方塊物品(BlockItem),BlockItem是Block的物品,我們使用SILVER_BLOCK.get()將方塊物品與方塊本身結合起來。
我對這篇的內容不太滿意,之後會稍微修改